export {};

// const handleClick = () => {
//   console.log("我被点击了！！！！");
// };

// const handleClick1 = () => {
//   console.log("1111我被点击了");
// };

// // 事件绑定
// document.addEventListener("click", handleClick);
// document.addEventListener("click", handleClick1);

// // 事件触发
// document.body.click();

// // 事件解除
// document.removeEventListener("click", handleClick);
// document.removeEventListener("click", handleClick1);

// document.body.click();

interface IEventPublic {
  [propsName: string]: Function[];
}

class Event {
  event: IEventPublic = {};
  // 绑定
  on(type: string, cb: Function) {
    // 1. 判断是否存在该事件
    if (this.event[type]) {
      // 存在
      this.event[type].push(cb);
    } else {
      // 不存在
      this.event[type] = [cb];
    }
  }

  // {
  //   click: [() => {}, () => {}]
  // }
  // 触发
  emit(type: string) {
    if (this.event[type]) {
      this.event[type].forEach((cb) => {
        cb();
      });
    }
  }
  // 移除
  off(type: string, cb?: Function) {
    if (cb) {
      // 删除指定事件函数
      const index = this.event[type].indexOf(cb);
      this.event[type].splice(index, 1);
    } else {
      // 删除事件
      delete this.event[type];
    }
  }
}

const ev = new Event();

const handleClick = () => {
  console.log("click 事件执行了");
};

ev.on("click", handleClick);
ev.on("click", handleClick);
ev.on("click", handleClick);
ev.on("click", handleClick);
ev.on("qwer", () => console.log("qwer"));

ev.emit("click");
ev.emit("qwer");

ev.off("click");

ev.emit("click");
ev.emit("qwer");

